//
//  HHStateAndBindingSample.swift
//  HHSwiftuiPractice
//
//  Created by HongMac on 2023/10/5.
//@State是一个属性包装器，用于在视图中管理可变的局部状态。通过将属性标记为@State，您可以使该属性与视图的生命周期相关联，并在属性值更改时自动更新视图。当使用@State标记属性时，SwiftUI会负责在视图层次结构发生更改时自动刷新相关部分的视图。

//@Binding用于在不同视图之间创建双向绑定，使它们共享和同步相同的数据。通过将属性标记为@Binding，您可以传递数据的引用，并确保对该数据的更改在源视图和目标视图之间保持同步

/// 提取 组件
/// 我们先把command键按住，点击鼠标Button，此时会出现一个Extract Subview，点击后buttong部分的代码就会被提取成一个组件，我们命名为ButtonView。

import SwiftUI

struct HHStateAndBindingSample: View {
    @State var backgroundColor: Color = .mint

    
    var body: some View {
        ZStack {
            backgroundColor.edgesIgnoringSafeArea(.all)
            
            ButtonView(backgroundColor: $backgroundColor)

        }
    }
}

struct HHStateAndBindingSample_Previews: PreviewProvider {
    static var previews: some View {
        HHStateAndBindingSample()
    }
}


//组件
struct ButtonView: View {
    @State var title: String = "mint"
    @State var isSelected: Bool = false
    @Binding var backgroundColor: Color
    
    var body: some View {
        Button {
            isSelected = !isSelected
            backgroundColor = isSelected ? Color.yellow : .mint
            title = isSelected ? "yellow" : "mint"
            
        } label: {
            Text(title)
                .foregroundColor(.white)
                .font(.title2)
                .fontWeight(.medium)
                .padding(20)
                .background(
                    Color.black
                )
                .cornerRadius(15)
            
        }
    }
}
